home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / Foxpro 2.6 {Windows} / FOXPROW.MS_ / FOXPROW.bin
Text File  |  1994-03-10  |  47KB  |  1,522 lines

  1. '**************************************************************************
  2. '*                      FoxPro for Windows Setup
  3. '**************************************************************************
  4.  
  5. '$INCLUDE 'setup.inc'
  6.  
  7. '**************************************************************************
  8. '*                       Localize these strings
  9. '**************************************************************************
  10.  
  11. CONST C_COPYRIGHT$  = "(c) 1985 - 1994 Microsoft Corporation"
  12. CONST C_NAME$        = "Microsoft FoxPro for Windows"        ''Product name used in setup copyright.
  13. CONST DESCRIP$        = "FoxPro for Windows"                    ''Program Manager item name.
  14. CONST LASTRESORT$    = "Setup was damaged.  Please call Microsoft product support."  ''Worst case error message.
  15. CONST LASTTITLE$    = "Setup Error"                            ''Title of worst case error box.
  16. CONST NOGROUP$        = "- NONE -"                            ''Group name which means don't create a group.
  17. CONST QADES$        = "FoxPro Q&A"                          ''PM Description.
  18. CONST READMEDES$    = "FoxPro Readme"                       ''PM Description.
  19. CONST TITLE$        = "Microsoft FoxPro for Windows Setup"    ''Main window title.
  20.  
  21. '**************************************************************************
  22.  
  23. DECLARE FUNCTION GetProgMgrGrps LIB "mscuistf.dll" AS INTEGER
  24. DECLARE FUNCTION QuietConfigUpdate LIB "mscuistf.dll" AS INTEGER
  25. DECLARE FUNCTION CanFindConfigSys LIB "mscuistf.dll" AS INTEGER
  26. DECLARE FUNCTION CalcListSize LIB "mscuistf.dll" AS LONG
  27. DECLARE FUNCTION WindowWidth LIB "mscuistf.dll" (iWind%) AS INTEGER
  28. DECLARE FUNCTION WindowHeight LIB "mscuistf.dll" (iWind%) AS INTEGER
  29. DECLARE FUNCTION AddLabelRecords LIB "mscuistf.dll" (foxuser$, label$) AS INTEGER
  30. DECLARE FUNCTION UpdateConfigFPW LIB "mscuistf.dll" (dest$, foxprowcfg$) AS INTEGER
  31. DECLARE FUNCTION FPWSetDate LIB "mscuistf.dll" (f$) AS INTEGER
  32. DECLARE FUNCTION FPWSetCurrencySym LIB "mscuistf.dll" (f$) AS INTEGER
  33. DECLARE FUNCTION FPWSetCurrencyRight LIB "mscuistf.dll" (i%) AS INTEGER
  34. DECLARE FUNCTION FPWSetKeyComp LIB "mscuistf.dll" (f$) AS INTEGER
  35. DECLARE FUNCTION FPWSetCodepage LIB "mscuistf.dll" (f$) AS INTEGER
  36. DECLARE FUNCTION FPWSetCollate LIB "mscuistf.dll" (f$) AS INTEGER
  37. DECLARE FUNCTION FPWSetHours24 LIB "mscuistf.dll" (i%) AS INTEGER
  38.  
  39. ''Local functions and procedures.
  40. DECLARE SUB AddLabels
  41. DECLARE SUB AddToPM
  42. DECLARE SUB CheckDiskSpace
  43. DECLARE SUB ConfirmQuit
  44. DECLARE SUB DoRestart
  45. DECLARE SUB Install
  46. DECLARE SUB Get20Compatibility
  47. DECLARE SUB GetAdminPathInfo
  48. DECLARE SUB GetPathInfo
  49. DECLARE SUB GetPathGrpInfo
  50. DECLARE SUB GetUserAll
  51. DECLARE SUB GetUserInfo
  52. DECLARE SUB SetSectionSize
  53. DECLARE SUB UpdateConfig
  54. DECLARE SUB UpdateFPConfig
  55. DECLARE SUB UpdateINI
  56. DECLARE SUB WarnBadName
  57. DECLARE SUB WarnBadOrg
  58.  
  59. DECLARE FUNCTION CheckNoDosProd () AS STRING
  60. DECLARE FUNCTION CheckNoWinProd () AS STRING
  61. DECLARE FUNCTION ConfirmNameOrg () AS STRING
  62. DECLARE FUNCTION EnoughSpace () AS STRING
  63. DECLARE FUNCTION GetInstallOptions () AS STRING
  64. DECLARE FUNCTION GetInstallType () AS STRING
  65. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  66. DECLARE FUNCTION SetInstall (szType$) AS STRING
  67. DECLARE FUNCTION SectionSize (szSection$) AS STRING
  68. DECLARE FUNCTION WarnBadPath (dlg%) AS STRING
  69.  
  70.  
  71. ''Dialog ID's
  72. CONST ASKQUIT           = 200           ''Is the user certain they want to quit?
  73. CONST BADINI            = 4500            ''We couldn't read setup.ini.
  74. CONST BADMODE           = 2100          ''We aren't in Enhanced mode.
  75. CONST BADNAME           = 7700          ''The user has to enter a name.
  76. CONST BADPATH           = 6400          ''The target directory can't be written to.
  77. CONST BADPATHTOOLS      = 4400          ''The MSDEST$ directory is bad.
  78. CONST BILLBOARD         = 20000         ''Used to hold billboard bitmaps.
  79. CONST CANTFIND          = 3900          ''Can't find config.sys.
  80. CONST CANTQUIT          = 2300          ''Couldn't exit Windows.
  81. CONST CANTUPDATE        = 3500          ''Coulsn't update config.sys.
  82. CONST COMPATIBILITY     = 1600          ''Install aoptional config.fpw, etc.
  83. CONST CONFIRMINFO       = 7300          ''Is the name and organization ok?
  84. CONST CUSTOMINST        = 1100          ''Get type of installation.
  85. CONST DESTPATHADMIN     = 4300          ''Get the FoxPro and tools directories.
  86. CONST DESTPATH          = 300           ''Get target directory without a group.
  87. CONST DESTPATHGROUP     = 1000          ''Get target directory and group.
  88. CONST DICTIONARY        = 4100          ''Ask the user what dictionary to use.
  89. CONST DISKFULL          = 1700          ''Not enough disk space is available.
  90. CONST DISKWINFULL       = 3100          ''Not enough space on Windows drive.
  91. CONST DOSPRODUCT        = 1900          ''A DOS FoxPro is in the target directory.
  92. CONST DRIVEMAP            = 4600            ''Add-ons are mapped to a different drive than FP.
  93. CONST EDITCONFIG        = 2700          ''Review changes to config.sys
  94. CONST EDITMODE          = 3800          ''Select method of updating config.sys
  95. CONST EDITOK            = 3700          ''We updated config.sys
  96. CONST EXITADMINOK       = 2500          ''We finished ok from admin type install.
  97. CONST EXITFAILURE       = 400           ''We are quiting due to an error.
  98. CONST EXITNOICON        = 2800          ''We installed, but don't have an icon.
  99. CONST EXITSUCCESS       = 700           ''We have successfully finished.
  100. CONST EXITQUIT          = 600           ''We were forced to quit by the user.
  101. CONST GETNAMEORG        = 1300          ''Get the user's name and organization.
  102. CONST NOT386            = 1800          ''Machine is less than a 386SX.
  103. CONST OPTIONS           = 800           ''Basic type of installation.
  104. CONST OPTSERVER         = 2900          ''Type of installation including server.
  105. CONST OPTCLIENT         = 3000          ''Type of installation including workstation.
  106. CONST REINSTALL         = 2000          ''Copy disincentive message.
  107. CONST RESTARTWIN        = 2200          ''Warn before restarting windows.
  108. CONST WAITINI           = 2400          ''Wait while updating INI files.
  109. CONST WAITSPACE         = 1500          ''Wait while getting free disk space.
  110. CONST WINPRODUCT        = 4200          ''Overwrite another copy of the executable?
  111.  
  112. CONST REQFILES          = 1
  113. CONST WINHELP           = 2
  114. CONST FPHELP            = 3
  115. CONST TUTORIAL          = 4
  116. CONST EXAMPLES          = 5
  117. CONST FOXDOC            = 6
  118. CONST MSGRAPH           = 7
  119. CONST SPELL             = 8
  120. CONST SYSFILES          = 9
  121. CONST WINFILES          = 10
  122. CONST SETUP             = 11
  123.  
  124. CONST KEYCOMPDOS        = 1
  125. CONST KEYCOMPWIN        = 2
  126. CONST SPELLUS           = 3
  127. CONST SPELLUK           = 4
  128.  
  129. CONST CONFIG$           = "config.fpw"                  ''Name of config file we will write
  130. CONST DBFBAK$           = "foxuser.dbk"                 ''Name used to backup foxuser.dbf.
  131. CONST DIRINI$            = "setup\paths.ini"                ''Records tools location
  132. CONST FPTBAK$           = "foxuser.fpk"                 ''Name used to backup foxuser.fpt.
  133. CONST CUIDLL$           = "mscuistf.dll"                ''The .DLL containing our dialog routines.
  134. CONST INIFILE$          = "setup.ini"                   ''Name of the .INI file to brand.
  135. CONST LOGO              = 1                             ''Logo Bitmap ID.
  136. CONST MINFILES%         = 40
  137. CONST QA$               = "pssqa.txt"                   ''Name of QA file.
  138. CONST README$           = "readme.txt"                  ''Name of README file.
  139. CONST SAVECONFIG$       = "config.old"                  ''What to call existing config if backing up
  140.  
  141. GLOBAL BRAND%           ''Used to warn us that we didn't brand product during copy.
  142. GLOBAL DEST$            ''Default destination directory.
  143. GLOBAL fEXE%            ''Installing the executable?
  144. GLOBAL fGRAPH%          ''Flag indicating if MS Graph is going to be installed.
  145. GLOBAL FLAGS%           ''Flags passed to UpdateConfigFPW().
  146. GLOBAL fSPELL%          ''Flag indicating if the spell checker is to be installed.
  147. GLOBAL fWIN30%          ''Flag indicating if we are running under 3.0
  148. GLOBAL GROUP$           ''Default destination group.
  149. GLOBAL MSDEST$          ''MS Tools destination directory.
  150. GLOBAL SRCDIR$          ''Location of install files.
  151. GLOBAL SIZESSET%        ''Have we recorded the section sizes yet?
  152. GLOBAL WINDIR$          ''Windows directory.
  153. GLOBAL WINSYSDIR$       ''Windows system directory.
  154.  
  155. INIT:
  156.     ON ERROR GOTO QUIT
  157.  
  158.     BRAND%          = 0
  159.     DEST$           = "c:\fpw26"
  160.     DLG%            = 0
  161.     fEXE%           = 0
  162.     fWIN30%         = 0
  163.     fGRAPH%         = 0
  164.     fSPELL%         = 0
  165.     GROUP$          = "FoxPro for Windows"
  166.     MSDEST$         = MakePath(GetWindowsDir(), "msapps")
  167.     PMGROUPS%       = 0
  168.     SIZESET%        = 0
  169.     SRCDIR$         = GetSymbolValue("STF_SRCDIR")
  170.     WINDIR$         = GetWindowsDir()
  171.     WINSYSDIR$      = GetWindowsSysDir()
  172.  
  173.     x% = SetTimeValue(0,00,0)
  174.  
  175.     FOR x% = 1 TO SETUP STEP 1
  176.         IF x% <> SETUP THEN
  177.             AddListItem "CheckItems", "ON"
  178.         ELSE
  179.             AddListItem "CheckItems", "OFF"
  180.         ENDIF
  181.         AddListItem "CheckItemsSize", "0"
  182.         AddListItem "WinDriveSize", "0"
  183.     NEXT
  184.  
  185.     SetBitmap CUIDLL$, LOGO
  186.  
  187.     SetTitle TITLE$
  188.     SetAbout C_NAME$, C_COPYRIGHT$
  189.     SetSymbolValue "NoGroup", NOGROUP$
  190.     SetSymbolValue "FoxProGroup", GROUP$
  191.  
  192.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  193.     IF szInf$ = "" THEN
  194.     szInf$ = GetSymbolValue("STF_CWDDIR") + "FOXPROW.INF"
  195.     END IF
  196.     ReadInfFile szInf$
  197.  
  198. ''
  199. '' Make sure we have at least a 386SX.
  200. ''
  201. IF GetProcessorType() < 3 THEN
  202.     PROCESSOR:
  203.     sz$ = UIStartDlg(CUIDLL$, NOT386, "FInfo0DlgProc", 0, "")
  204.     IF sz$ = "EXIT" OR sz$ = "CANCEL" THEN
  205.         ConfirmQuit
  206.         GOTO PROCESSOR
  207.     END IF
  208.     UIPop 1
  209.     END
  210. END IF
  211.  
  212. ''
  213. '' Warn the user if we are not in Enhanced mode.
  214. ''
  215. IF GetWindowsMode() < 2 THEN
  216.     ENHANCED:
  217.         sz$ = UIStartDlg(CUIDLL$, BADMODE, "FQuitDlgProc", 0, "")
  218.         IF sz$ = "EXIT" OR sz$ = "CANCEL" THEN
  219.             ConfirmQuit
  220.             GOTO ENHANCED
  221.         ELSE
  222.             UIPop 1
  223.         END IF
  224. END IF
  225.  
  226. ''
  227. '' For our own use, see if we are running on a version later than 3.0.  If
  228. '' so, try and get a list of the groups.
  229. ''
  230. IF GetWindowsMajorVersion() = 3 AND GetWindowsMinorVersion() = 0 THEN
  231.     fWIN30% = 1
  232. ELSE
  233.     PMGROUPS% = GetProgMgrGrps()
  234. END IF
  235.  
  236. ''
  237. '' Have the user specify their name and organization.
  238. ''
  239. x% = InitSystemRead(1, INIFILE$, 0)
  240.  
  241.     ''
  242.     '' We don't want the user to do a workstation installation if a sever
  243.     '' installation hasn't been done.  This check tries to catch the most
  244.     '' blatant transgressions by making sure that the executable exists in
  245.     '' the source directory.
  246.     ''
  247.     IF GetSymbolValue("STF_MODE") = "NETWORK" THEN
  248.         IF DoesFileExist(MakePath(SRCDIR$,"foxprow.exe"), femExists) = 0 THEN
  249.             SetSymbolValue "STF_MODE", "NORM"
  250.         END IF
  251.     END IF
  252.  
  253.     sz$ = GetSymbolValue("STF_CD_TYPE")
  254.     IF  sz$ = "NEW" OR sz$ = "WKST" OR sz$ = "USEDNAME" OR sz$ = "ORGUSED" THEN
  255.         GetUserInfo
  256.     ELSE
  257.         sz$ = UIStartDlg(CUIDLL$, BADINI, "FInfo0DlgProc", 0, "")
  258.         GOTO QUIT
  259.     END IF
  260.  
  261. ''
  262. '' Have the user specify where to put the product.  (Including the group if
  263. '' we can get the info.)
  264. ''
  265. GETTARGETINFO:
  266.     SetSymbolValue "FreeSpace", ""
  267.     SetSymbolValue "FreeSpaceWin", ""
  268.     IF GetSymbolValue("STF_MODE") = "ADMIN" THEN
  269.         GetAdminPathInfo
  270.     ELSEIF fWIN30% = 1 OR GetListLength("ListItemsIn") = 0 THEN
  271.         GetPathInfo
  272.     ELSE
  273.         GetPathGrpInfo
  274.     END IF
  275.  
  276.     CheckDiskSpace
  277.  
  278. ''
  279. '' Get the type of installation we are doing.
  280. ''
  281. IF GetSymbolValue("STF_MODE") = "NETWORK" THEN
  282.     y$ = SetInstall("WKST")
  283. ELSEIF GetSymbolValue("STF_MODE") = "ADMIN" THEN
  284.     y$ = SetInstall("ADMIN")
  285. ELSE
  286.     IF GetInstallType() = "CUSTOM" THEN
  287.         CUSTOMINSTALLATION:
  288.             IF GetInstallOptions() = "BACK" THEN
  289.                 GOTO GETTARGETINFO
  290.             END IF
  291.     END IF
  292. END IF
  293.  
  294. IF EnoughSpace() = "BACK" THEN
  295.     GOTO CUSTOMINSTALLATION
  296. END IF
  297.  
  298. ''
  299. '' See if the user wants DOS or Windows style keys.
  300. ''
  301. Get20Compatibility
  302.  
  303. ''
  304. '' Try to gaurantee that FILES are at least a minimum value.
  305. ''
  306. UpdateConfig
  307.  
  308. Install
  309.  
  310. IF ERR = STFQUIT THEN
  311.     DLG% = EXITQUIT
  312. ELSE
  313.     IF GetSymbolValue("STF_MODE") = "ADMIN" THEN
  314.         DLG% = EXITADMINOK
  315.     ELSE
  316.         DLG% = EXITSUCCESS
  317.     END IF
  318. END IF
  319. GOTO QUITL1
  320.  
  321. QUIT:
  322.     UIPopAll
  323.     IF ERR = STFPROGMAN THEN
  324.         DLG% = EXITNOICON
  325.     ELSEIF ERR = STFQUIT THEN
  326.         DLG% = EXITQUIT
  327.     ELSE
  328.         DLG% = EXITFAILURE
  329.     END IF
  330.  
  331. QUITL1:
  332.     ON ERROR GOTO TOAST
  333.  
  334.     sz$ = UIStartDlg(CUIDLL$, DLG%, "FQuitDlgProc", 0, "")
  335.     IF sz$ = "REACTIVATE" THEN
  336.     GOTO QUITL1
  337.     END IF
  338.     UIPop ALL
  339.  
  340.     IF BRAND%=1 AND DoesFileExist(MakePath(DEST$,"foxprow.exe"), femExists) = 1 THEN
  341.         CloseSystem "reqfiles", "prodfile", DEST$, 456, 123
  342.     END IF
  343.  
  344.     END
  345.  
  346. TOAST:
  347.     UIPopAll
  348.     i% = DoMsgBox(LASTRESORT$, LASTTITLE$, MB_OK+MB_TASKMODAL+MB_ICONHAND)
  349.     END
  350.  
  351. '**
  352. '** Purpose:
  353. '**     Copies the files in the copy list and adds FoxPro to the target
  354. '**             group if one was psecified.
  355. '** Arguments:
  356. '**     none.
  357. '** Returns:
  358. '**     none.
  359. '*************************************************************************
  360. SUB Install STATIC
  361.  
  362.     IF GetSymbolValue("STF_CD_TYPE") = "NEW" THEN
  363.         IF InitSystemWrite( 1, INIFILE$, 1 ) = 0 THEN
  364.             sz$ = UIStartDlg(CUIDLL$, BADINI, "FInfo0DlgProc", 0, "")
  365.             ERROR EXITFAILURE
  366.         END IF
  367.     END IF
  368.  
  369.     ''
  370.     '' Initialize the billboard
  371.     ''
  372.     ClearBillboardList
  373.     SetSymbolValue "BillboardList", ""
  374.     AddListItem "BillboardList", "F1"
  375.     AddListItem "BillboardList", "F2"
  376.     AddListItem "BillboardList", "F3"
  377.     AddListItem "BillboardList", "F4"
  378.     AddListItem "BillboardList", "F5"
  379.     AddListItem "BillboardList", "F6"
  380.     AddListItem "BillboardList", "F7"
  381.     AddListItem "BillboardList", "F8"
  382.     AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1
  383.     IF GetSymbolValue("STF_MODE") <> "NETWORK" THEN
  384.         AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1
  385.         AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1
  386.         AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1
  387.         AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1
  388.         AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1
  389.         AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1
  390.         AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1
  391.         SetSymbolValue "BillboardNumber", "1"
  392.     ELSE
  393.         SetSymbolValue "BillboardNumber", "8"
  394.     END IF
  395.  
  396.     SetCopyGaugePosition WindowWidth(HwndFrame())-158, WindowHeight(HwndFrame())-72
  397.  
  398.     ''
  399.     '' Remember that we need to brand the executable.
  400.     ''
  401.     IF GetSymbolValue("STF_MODE") <> "NETWORK" THEN
  402.         IF (fEXE% = 1 OR GetSymbolValue("STF_MODE") = "ADMIN") THEN
  403.             BRAND% = 1
  404.         END IF
  405.     END IF
  406.  
  407.     ''
  408.     '' Do the copy
  409.     ''
  410.     SetRestartDir GetSymbolValue("STF_CWDDIR")
  411.     CopyFilesInCopyList
  412.  
  413.     AddLabels
  414.     AddToPM
  415.     UpdateFPConfig
  416.     UpdateINI
  417.  
  418.     IF RestartListEmpty() = 0 THEN
  419.         DoRestart
  420.     END IF
  421.  
  422. END SUB
  423.  
  424. '**
  425. '** Purpose:
  426. '**     Creates the PM group and items(s).
  427. '** Arguments:
  428. '**     none.
  429. '** Returns:
  430. '**     none.
  431. '*************************************************************************
  432. SUB AddToPM STATIC
  433.     IF DoesDirExist(DEST$) = 0 THEN
  434.         CreateDir DEST$, cmoVital
  435.     END IF
  436.  
  437.     IF GROUP$ <> NOGROUP$ AND (fEXE% = 1 OR GetSymbolValue("STF_MODE") = "NETWORK") AND GetSymbolValue("STF_MODE") <> "ADMIN" THEN
  438.         CreateProgmanGroup GROUP$, "", cmoNone
  439.  
  440.         IF GetSymbolValue("STF_MODE") = "NETWORK" AND DoesFileExist(MakePath(SRCDIR$,"foxprow.exe"), femExists) = 1 THEN
  441.             IF fWIN30% = 1 THEN
  442.                 CreateProgmanItem GROUP$, DESCRIP$, MakePath(SRCDIR$,"foxprow.exe"), "", cmoOverwrite
  443.             ELSE
  444.                 CreateProgmanItem GROUP$, DESCRIP$, MakePath(SRCDIR$,"foxprow.exe"), MakePath(SRCDIR$,"foxprow.exe")+",0,0,0,"+DEST$, cmoOverwrite
  445.             ENDIF
  446.         ELSE
  447.             IF fWIN30% = 1 THEN
  448.                 CreateProgmanItem GROUP$, DESCRIP$, MakePath(DEST$,"foxprow.exe"), "", cmoOverwrite
  449.             ELSE
  450.                 CreateProgmanItem GROUP$, DESCRIP$, MakePath(DEST$,"foxprow.exe"), MakePath(DEST$,"foxprow.exe")+",0,0,0,"+DEST$, cmoOverwrite
  451.             ENDIF
  452.         END IF
  453.  
  454.         '' Add the readme file
  455.         IF GetSymbolValue("STF_MODE") = "NETWORK" THEN
  456.             IF DoesFileExist(MakePath(SRCDIR$,README$), femExists) = 1 THEN
  457.                 CreateProgmanItem GROUP$, READMEDES$, MakePath(SRCDIR$, README$), "", cmoOverwrite
  458.             END IF
  459.         ELSE
  460.             IF DoesFileExist(MakePath(DEST$,README$), femExists) = 1 THEN
  461.                 CreateProgmanItem GROUP$, READMEDES$, MakePath(DEST$, README$), "", cmoOverwrite
  462.             END IF
  463.         END IF
  464.  
  465.         '' Add the Q&A file
  466.         IF GetSymbolValue("STF_MODE") = "NETWORK" THEN
  467.             IF DoesFileExist(MakePath(SRCDIR$,QA$), femExists) = 1 THEN
  468.                 CreateProgmanItem GROUP$, QADES$, MakePath(SRCDIR$, QA$), "", cmoOverwrite
  469.             END IF
  470.         ELSE
  471.             IF DoesFileExist(MakePath(DEST$,QA$), femExists) = 1 THEN
  472.                 CreateProgmanItem GROUP$, QADES$, MakePath(DEST$, QA$), "", cmoOverwrite
  473.             END IF
  474.         END IF
  475.  
  476.         ShowProgmanGroup  GROUP$, 1, cmoNone
  477.     ENDIF
  478. END SUB
  479.  
  480. '**
  481. '** Purpose:
  482. '**     Adds label layouts to FoxUser, creating it if needed.
  483. '** Arguments:
  484. '**     none.
  485. '** Returns:
  486. '**     none.
  487. '*************************************************************************
  488. SUB AddLabels STATIC
  489.     IF DoesFileExist(MakePath(DEST$,"foxuser.dbf"), femExists) = 1 THEN
  490.         CopyFile MakePath(DEST$, "FOXUSER.DBF"), MakePath(DEST$, DBFBAK$), cmoOverwrite, 0
  491.         CopyFile MakePath(DEST$, "FOXUSER.FPT"), MakePath(DEST$, FPTBAK$), cmoOverwrite, 0
  492.         CopyFile MakePath(GetSymbolValue("STF_CWDDIR"),"FOXLABEL.DBF"), MakePath(DEST$,"FOXLABEL.DBF"), cmoOverwrite, 0
  493.         CopyFile MakePath(GetSymbolValue("STF_CWDDIR"),"FOXLABEL.FPT"), MakePath(DEST$,"FOXLABEL.FPT"), cmoOverwrite, 0
  494.         x% = AddLabelRecords(MakePath(DEST$,"FOXUSER.DBF"), MakePath(DEST$,"FOXLABEL.DBF"))
  495.         IF x% <> 0 THEN
  496.             CopyFile MakePath(DEST$, DBFBAK$), MakePath(DEST$,"FOXUSER.DBF"), cmoOverwrite, 0
  497.             CopyFile MakePath(DEST$, FPTBAK$), MakePath(DEST$,"FOXUSER.FPT"), cmoOverwrite, 0
  498.         ENDIF
  499.         RemoveFile MakePath(DEST$, DBFBAK$), cmpFprce
  500.         RemoveFile MakePath(DEST$, FPTBAK$), cmpFprce
  501.         RemoveFile MakePath(DEST$,"FOXLABEL.DBF"), cmoForce
  502.         RemoveFile MakePath(DEST$,"FOXLABEL.FPT"), cmoForce
  503.     ELSE
  504.         CopyFile MakePath(GetSymbolValue("STF_CWDDIR"),"FOXLABEL.DBF"), MakePath(DEST$,"FOXUSER.DBF"), cmoOverwrite, 0
  505.         CopyFile MakePath(GetSymbolValue("STF_CWDDIR"),"FOXLABEL.FPT"), MakePath(DEST$,"FOXUSER.FPT"), cmoOverwrite, 0
  506.     END IF
  507. END SUB
  508.  
  509. '**
  510. '** Purpose:
  511. '**     Updates the user's FoxPro configuration.
  512. '** Arguments:
  513. '**     none.
  514. '** Returns:
  515. '**     none.
  516. '*************************************************************************
  517. SUB UpdateFPConfig STATIC
  518.     IF GetSymbolValue("STF_MODE") <> "NETWORK" THEN
  519.         x% = UpdateConfigFPW(DEST$, GetEnvVariableValue("FOXPROWCFG"))
  520.  
  521.         IF (fEXE% = 1 OR GetSymbolValue("STF_MODE") = "ADMIN") THEN
  522.             CloseSystem "reqfiles", "prodfile", DEST$, 456, 123
  523.             BRAND% = 0
  524.         END IF
  525.     END IF
  526. END SUB
  527.  
  528. '**
  529. '** Purpose:
  530. '**     Exits to DOS to update Window's system files which were in use.
  531. '** Arguments:
  532. '**     none.
  533. '** Returns:
  534. '**     none.
  535. '*************************************************************************
  536. SUB DoRestart STATIC
  537.     RESTARTBEGIN:
  538.         sz$ = UIStartDlg(CUIDLL$, RESTARTWIN, "FQuitDlgProc", 0, "")
  539.         IF sz$ = "EXIT" OR sz$ = "CANCEL" THEN
  540.             ConfirmQuit
  541.             GOTO RESTARTBEGIN
  542.         END IF
  543.         UIPop 1
  544.  
  545.         TRYTOQUIT:
  546.         IF ExitExecRestart() = 0 THEN
  547.             TRYTOQUITL2:
  548.             sz$ = UIStartDlg(CUIDLL$, CANTQUIT, "FQuitDlgProc", 0, "")
  549.             IF sz$ = "EXIT" OR sz$ = "CANCEL" THEN
  550.                 ConfirmQuit
  551.                 GOTO TRYTOQUITL2
  552.             END IF
  553.             GOTO TRYTOQUIT
  554.         END IF
  555. END SUB
  556.  
  557. '**
  558. '** Purpose:
  559. '**     Gets the user's name and organization as appropriate.
  560. '** Arguments:
  561. '**     none.
  562. '** Returns:
  563. '**     none.
  564. '*************************************************************************
  565. SUB GetUserInfo STATIC
  566.     IF GetSymbolValue("STF_MODE") <> "NETWORK" THEN
  567.         IF IsDriveNetwork(MID$(SRCDIR$, 1, 1)) <> 1 OR DoesFileExist(MakePath(SRCDIR$,"foxprow.exe"),femExists) <> 1 THEN
  568.             IF GetSymbolValue("STF_CD_TYPE") = "NEW" THEN
  569.                 GetUserAll
  570.             ELSE
  571.                 ''
  572.                 '' Copy Disincentive Dialog
  573.                 ''
  574.                 USEDDISKS:
  575.                     SetSymbolValue "ConfirmTextIn", ""
  576.                     AddListItem "ConfirmTextIn", GetSymbolValue( "STF_CD_NAME" )
  577.                     AddListItem "ConfirmTextIn", GetSymbolValue( "STF_CD_ORG" )
  578.  
  579.                     sz$ = UIStartDlg(CUIDLL$, REINSTALL, "FConfirmDlgProc", 0, "")
  580.                     IF sz$ = "EXIT" or sz$ = "CANCEL" THEN
  581.                         ConfirmQuit
  582.                         GOTO USEDDISKS
  583.                     END IF
  584.                     UIPop 1
  585.             END IF
  586.         END IF
  587.     END IF
  588.  
  589. END SUB
  590.  
  591. '**
  592. '** Purpose:
  593. '**     Gets both the user's name and organization.
  594. '** Arguments:
  595. '**     none.
  596. '** Returns:
  597. '**     none.
  598. '*************************************************************************
  599. SUB GetUserAll STATIC
  600.     szName$ = GetSymbolValue( "STF_CD_NAME" )
  601.     szOrg$ = GetSymbolValue( "STF_CD_ORG" )
  602.  
  603.     SetSymbolValue "NameIn", ""
  604.     SetSymbolValue "NameOut", ""
  605.     SetSymbolValue "OrgIn", ""
  606.     SetSymbolValue "OrgOut", ""
  607.     SetSymbolValue "ConfirmTextIn", ""
  608.  
  609.     AddListItem "NameIn", szName$
  610.     AddListItem "OrgIn", szOrg$
  611.     AddListItem "ConfirmTextIn", szName$
  612.     AddListItem "ConfirmTextIn", szOrg$
  613.  
  614.     NEWNAMEORG:
  615.         ReplaceListItem "NameIn", 1, szName$
  616.         ReplaceListItem "OrgIn", 1, szOrg$
  617.         sz$ = UIStartDlg(CUIDLL$, GETNAMEORG, "FNameOrgDlgProc", 0, "")
  618.         szName$ = RTRIM$(LTRIM$(GetSymbolValue("NameOut")))
  619.         szOrg$ = GetSymbolValue("OrgOut")
  620.         IF sz$ = "CONTINUE" THEN
  621.             IF LEN(szName$) = 0 THEN
  622.                 WarnBadName
  623.                 GOTO NEWNAMEORG
  624.             END IF
  625.             UIPop 1
  626.         ELSE
  627.             ConfirmQuit
  628.             GOTO NEWNAMEORG
  629.         END IF
  630.  
  631.         ReplaceListItem "ConfirmTextIn", 1, szName$
  632.         ReplaceListItem "ConfirmTextIn", 2, szOrg$
  633.         IF ConfirmNameOrg() = "BACK" THEN
  634.             ReplaceListItem "NameIn", 1, szName$
  635.             ReplaceListItem "OrgIn", 1, szOrg$
  636.             GOTO NEWNAMEORG
  637.         ENDIF
  638.  
  639.     SetSymbolValue "STF_CD_NAME", szName$
  640.     SetSymbolValue "STF_CD_ORG", szOrg$
  641.  
  642.     RemoveSymbol "ConfirmTextIn"
  643.     RemoveSymbol "NameIn"
  644.     RemoveSymbol "NameOut"
  645.     RemoveSymbol "OrgIn"
  646.     RemoveSymbol "OrgOut"
  647. END SUB
  648.  
  649. '**
  650. '** Purpose:
  651. '**     Has the user verify that the name and organization info is
  652. '**             acceptable.
  653. '** Arguments:
  654. '**     none.
  655. '** Returns:
  656. '**     none.
  657. '*************************************************************************
  658. FUNCTION ConfirmNameOrg () STATIC AS STRING
  659.     VALIDATENAMEORG:
  660.         sz$ = UIStartDlg(CUIDLL$, CONFIRMINFO, "FConfirmDlgProc", 0, "")
  661.         IF sz$ = "CONTINUE" THEN
  662.             ConfirmNameOrg = "CONTINUE"
  663.         ELSEIF sz$ = "BACK" THEN
  664.             ConfirmNameOrg = "BACK"
  665.         ELSE
  666.             ConfirmQuit
  667.             GOTO VALIDATENAMEORG
  668.         END IF
  669.  
  670.         UIPop 1
  671. END FUNCTION
  672.  
  673. '**
  674. '** Purpose:
  675. '**     Gets the path where the user wishes to install FoxPro and the
  676. '**             path for the Windows support routines.
  677. '** Arguments:
  678. '**     none.
  679. '** Returns:
  680. '**     none.
  681. '*************************************************************************
  682. SUB GetAdminPathInfo STATIC
  683.  
  684.     GETADMINPATHINFOSTART:
  685.         SetSymbolValue "NameIn", LCASE$(DEST$)
  686.         SetSymbolValue "NameOut", ""
  687.         SetSymbolValue "OrgIn", LCASE$(MSDEST$)
  688.         SetSymbolValue "OrgOut", ""
  689.  
  690.         sz$ = UIStartDlg(CUIDLL$, DESTPATHADMIN, "FNameOrgDlgProc", 0, "")
  691.         DEST$ = GetSymbolValue("NameOut")
  692.  
  693.         DEST$ = LCASE$(DEST$)
  694.         MSDEST$ = LCASE$(MSDEST$)
  695.  
  696.         IF MID$(DEST$, LEN(DEST$), 1) <> "\" THEN
  697.             DEST$ = DEST$ + "\"
  698.         END IF
  699.         MSDEST$ = GetSymbolValue("OrgOut")
  700.         IF MID$(MSDEST$, LEN(MSDEST$), 1) <> "\" THEN
  701.             MSDEST$ = MSDEST$ + "\"
  702.         END IF
  703.  
  704.         IF sz$ = "CONTINUE" THEN
  705.             IF IsDirWritable(DEST$) = 0 THEN
  706.             x$ = WarnBadPath(BADPATH)
  707.                 GOTO GETADMINPATHINFOSTART
  708.             END IF
  709.                 IF IsDirWritable(MSDEST$) = 0 THEN
  710.                     x$ = WarnBadPath(BADPATHTOOLS)
  711.                     GOTO GETADMINPATHINFOSTART
  712.                 END IF
  713.         ELSEIF sz$ = "REACTIVATE" THEN
  714.             GOTO GETADMINPATHINFOSTART
  715.         ELSE
  716.                 ConfirmQuit
  717.             GOTO GETADMINPATHINFOSTART
  718.         END IF
  719.  
  720.         IF LCASE$(MID$(DEST$, 1, 1)) <> LCASE$(MID$(MSDEST$, 1, 1)) THEN
  721.             GETDRIVECONFIRM:
  722.                 sz$ = UIStartDlg(CUIDLL$, DRIVEMAP, "FInfo0DlgProc", 0, "")
  723.                 IF sz$ = "BACK" THEN
  724.                     UIPop 1
  725.                     GOTO GETADMINPATHINFOSTART
  726.                 ELSEIF sz$ = "EXIT" OR sz$ = "CANCEL" THEN
  727.                     ConfirmQuit
  728.                     GOTO GETDRIVECONFIRM
  729.                 END IF
  730.  
  731.                 UIPop 1
  732.         END IF
  733.  
  734.         IF CheckNoWinProd() = "BACK" THEN
  735.             GOTO GETADMINPATHINFOSTART
  736.         END IF
  737.  
  738.         IF CheckNoDosProd() = "BACK" THEN
  739.             GOTO GETADMINPATHINFOSTART
  740.         END IF
  741.  
  742.         UIPop 1
  743.  
  744.         RemoveSymbol "NameIn"
  745.         RemoveSymbol "NameOut"
  746.         RemoveSymbol "OrgIn"
  747.         RemoveSymbol "OrgOut"
  748. END SUB
  749.  
  750. '**
  751. '** Purpose:
  752. '**     Gets the path where the user wishes to install FoxPro.
  753. '** Arguments:
  754. '**     none.
  755. '** Returns:
  756. '**     none.
  757. '*************************************************************************
  758. SUB GetPathInfo STATIC
  759.  
  760.     SetSymbolValue "EditTextIn", LCASE$( DEST$ )
  761.     SetSymbolValue "EditFocus", "END"
  762.  
  763.     GETPATHINFOSTART:
  764.         sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", 0, "")
  765.         DEST$ = GetSymbolValue("EditTextOut")
  766.         IF MID$(DEST$, LEN(DEST$), 1) = ":" THEN
  767.             DEST$ = DEST$ + "\"
  768.         END IF
  769.  
  770.     IF sz$ = "CONTINUE" THEN
  771.         IF IsDirWritable(DEST$) = 0 THEN
  772.         x$ = WarnBadPath(BADPATH)
  773.             GOTO GETPATHINFOSTART
  774.         END IF
  775.         ELSEIF sz$ = "REACTIVATE" THEN
  776.         GOTO GETPATHINFOSTART
  777.         ELSE
  778.             ConfirmQuit
  779.         GOTO GETPATHINFOSTART
  780.         END IF
  781.  
  782.         IF CheckNoWinProd() = "BACK" THEN
  783.             SetSymbolValue "EditTextIn", DEST$
  784.             GOTO GETPATHINFOSTART
  785.         END IF
  786.  
  787.         IF CheckNoDosProd() = "BACK" THEN
  788.             SetSymbolValue "EditTextIn", DEST$
  789.             GOTO GETPATHINFOSTART
  790.         END IF
  791.  
  792.         UIPop 1
  793.  
  794.         RemoveSymbol "EditTextIn"
  795.         RemoveSymbol "EditTextOut"
  796.         RemoveSymbol "EditFocus"
  797. END SUB
  798.  
  799. '**
  800. '** Purpose:
  801. '**     Gets the path and PM group where the user wishes to install FoxPro.
  802. '** Arguments:
  803. '**     none.
  804. '** Returns:
  805. '**     none.
  806. '*************************************************************************
  807. SUB GetPathGrpInfo () STATIC
  808.  
  809.     SetSymbolValue "EditTextIn", DEST$
  810.     SetSymbolValue "ListDefault", GROUP$
  811.  
  812.     GETPATHGRPINFOSTART:
  813.         sz$ = UIStartDlg(CUIDLL$, DESTPATHGROUP, "FDirGrpProc", 0, "")
  814.         DEST$ = GetSymbolValue("EditTextOut")
  815.         GROUP$ = GetSymbolValue("ListItemsOut")
  816.         IF MID$(DEST$, LEN(DEST$), 1) = ":" THEN
  817.             DEST$ = DEST$ + "\"
  818.         END IF
  819.  
  820.         IF sz$ = "CONTINUE" THEN
  821.             IF IsDirWritable(DEST$) = 0 THEN
  822.                 x$ = WarnBadPath(BADPATH)
  823.                 GOTO GETPATHGRPINFOSTART
  824.             END IF
  825.         ELSEIF sz$ = "REACTIVATE" THEN
  826.             GOTO GETPATHGRPINFOSTART
  827.         ELSE
  828.             ConfirmQuit
  829.             GOTO GETPATHGRPINFOSTART
  830.         END IF
  831.  
  832.         IF CheckNoWinProd() = "BACK" THEN
  833.             SetSymbolValue "EditTextIn", DEST$
  834.             SetSymbolValue "ListDefault", GROUP$
  835.             GOTO GETPATHGRPINFOSTART
  836.         END IF
  837.  
  838.         IF CheckNoDosProd() = "BACK" THEN
  839.             SetSymbolValue "EditTextIn", DEST$
  840.             SetSymbolValue "ListDefault", GROUP$
  841.             GOTO GETPATHGRPINFOSTART
  842.         END IF
  843.  
  844.         UIPop 1
  845.  
  846.         RemoveSymbol "EditTextIn"
  847.         RemoveSymbol "EditTextOut"
  848.         RemoveSymbol "ListDefault"
  849.         RemoveSymbol "ListItemsOut"
  850. END SUB
  851.  
  852. '**
  853. '** Purpose:
  854. '**     Checks to see if we are installing over another copy of FoxPro for
  855. '**             Windows and asks the user if they really want to do it.
  856. '** Arguments:
  857. '**     none.
  858. '** Returns:
  859. '**     none.
  860. '*************************************************************************
  861. FUNCTION CheckNoWinProd () STATIC AS STRING
  862.  
  863.     CHECKNOWIN:
  864.         IF DOESFILEEXIST( MakePath( DEST$, "FOXPROW.EXE" ), femExists ) = 1 THEN
  865.             HASWIN:
  866.                 sz$ = UIStartDlg(CUIDLL$, WINPRODUCT, "FInfo0DlgProc", 0, "")
  867.                 IF sz$ = "EXIT" OR sz$ = "CANCEL" THEN
  868.                     ConfirmQuit
  869.                     GOTO HASWIN
  870.                 ENDIF
  871.                 CheckNoWinProd = sz$
  872.  
  873.                 UIPop 1
  874.         ELSE
  875.             CheckNoWinProd = "CONTINUE"
  876.         ENDIF
  877. END FUNCTION
  878.  
  879.  
  880. '**
  881. '** Purpose:
  882. '**    Check to see if the installation directory contains a FoxPro for DOS and,
  883. '**        if so, let the user change their mind.
  884. '**
  885. '** Arguments:
  886. '**     none.
  887. '** Returns:
  888. '**     "CONTINUE" or "BACK" to indicate that we should go ahead and
  889. '**             install here or ask for another path.
  890. '*************************************************************************
  891. FUNCTION CheckNoDosProd () STATIC AS STRING
  892.  
  893.     CHECKNODOS:
  894.         IF DoesFileExist( MakePath( DEST$, "FOXPRO.EXE" ), femExists ) = 0 THEN
  895.         IF DoesFileExist( MakePath( DEST$, "FOXPROX.EXE" ), femExists ) = 0 THEN
  896.         IF DoesFileExist( MakePath( DEST$, "FOXPROL.EXE" ), femExists ) = 0 THEN
  897.         IF DoesFileExist( MakePath( DEST$, "FOXPROLX.EXE" ), femExists ) = 0 THEN
  898.             CheckNoDosProd = "CONTINUE"
  899.             GOTO CHECKNODOSEND
  900.         END IF
  901.         END IF
  902.         END IF
  903.         END IF
  904.  
  905.     CHECKNODOSMIDDLE:
  906.         sz$ = UIStartDlg(CUIDLL$, DOSPRODUCT, "FInfo0DlgProc", 0, "")
  907.         IF sz$ = "EXIT" or sz$ = "CANCEL" THEN
  908.             ConfirmQuit
  909.             GOTO CHECKNODOSMIDDLE
  910.         END IF
  911.  
  912.         UIPop 1
  913.         CheckNoDosProd = sz$
  914.  
  915.     CHECKNODOSEND:
  916. END FUNCTION
  917.  
  918. '**
  919. '** Purpose:
  920. '**     Fills the copy list with the sections the user wants to install
  921. '**             based on installation categories.
  922. '** Arguments:
  923. '**     none.
  924. '** Returns:
  925. '**     none.
  926. '*************************************************************************
  927. FUNCTION GetInstallType () STATIC AS STRING
  928.  
  929.     modeflg% = 0
  930.     dlg% = OPTIONS
  931.     IF GetSymbolValue("STF_MODE") = "ADMIN" OR IsDriveNetwork(MID$(DEST$, 1, 1)) = 1 THEN
  932.         modeflg% = 3
  933.         dlg% = OPTSERVER
  934.     ELSEIF GetSymbolValue("STF_MODE") = "NETWORK" OR ((IsDriveNetwork(MID$(SRCDIR$, 1, 1)) = 1 OR GetSymbolValue("STF_CD_TYPE") = "WKST") AND DoesFileExist(MakePath(SRCDIR$,"foxprow.exe"), femExists) = 1) THEN
  935.         modeflg% = 2
  936.         dlg% = OPTCLIENT
  937.     ELSE
  938.         modeflg% = 1
  939.         dlg% = OPTIONS
  940.     ENDIF
  941.  
  942.     GETINSTALLTYPESTART:
  943.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FThreeOptDlgProc", 0, "")
  944.         IF sz$ = "ONE" THEN
  945.             UIPop 1
  946.             GetInstallType = "FULL"
  947.             SetSymbolValue "STF_MODE", "NORMAL"
  948.             y$ = SetInstall("MAX")
  949.     ELSEIF sz$ = "TWO" THEN
  950.             UIPop 1
  951.             GetInstallType = "CUSTOM"
  952.             SetSymbolValue "STF_MODE", "NORMAL"
  953.     ELSEIF sz$ = "THREE" THEN
  954.             UIPop 1
  955.             GetInstallType = "MINIMUM"
  956.  
  957.             IF modeflg% = 3 THEN
  958.                 SetSymbolValue "STF_MODE", "ADMIN"
  959.                 MSDEST$ = MakePath(DEST$, "setup\msapps")
  960.                 y$ = SetInstall("ADMIN")
  961.             ELSEIF modeflg% = 2 THEN
  962.                 SetSymbolValue "STF_MODE", "NETWORK"
  963.                 y$ = SetInstall("WKST")
  964.             ELSE
  965.                 y$ = SetInstall("MIN")
  966.             END IF
  967.         ELSE
  968.             ConfirmQuit
  969.             GOTO GETINSTALLTYPESTART
  970.     END IF
  971. END FUNCTION
  972.  
  973. '**
  974. '** Purpose:
  975. '**     Fills the copy list with the sections the user wants to install
  976. '**             based on selections from the available options.
  977. '** Arguments:
  978. '**     none.
  979. '** Returns:
  980. '**     none.
  981. '*************************************************************************
  982. FUNCTION GetInstallOptions () STATIC AS STRING
  983.  
  984.     GetInstallOptions = "CONTINUE"
  985.  
  986.     SetSymbolValue "Drive", UCASE$(MID$(DEST$, 1, 1)) + ":"
  987.     SetSymbolValue "WinDrive", UCASE$(MID$(WINSYSDIR$, 1, 1)) + ": (Windows)"
  988.  
  989.     GETINSTALLOPTIONSSTART:
  990.         sz$ = UIStartDlg(CUIDLL$, CUSTOMINST, "FCustInstDlgProc", 0, "")
  991.         IF sz$ = "CONTINUE" THEN
  992.             y$ = SetInstall("CUST")
  993.             UIPop 1
  994.         ELSEIF sz$ = "REACTIVATE" THEN
  995.             GOTO GETINSTALLOPTIONSSTART
  996.         ELSEIF sz$ = "BACK" THEN
  997.             UIPop 1
  998.             GetInstallOptions = "BACK"
  999.         ELSE
  1000.             ConfirmQuit
  1001.             GOTO GETINSTALLOPTIONSSTART
  1002.         END IF
  1003.  
  1004. END FUNCTION
  1005.  
  1006. '**
  1007. '** Purpose:
  1008. '**     Sets the global copy list to install a the options selected by
  1009. '**             the user as indicated by the list CheckItems.
  1010. '** Arguments:
  1011. '**     none.
  1012. '** Returns:
  1013. '**     none.
  1014. '*************************************************************************
  1015. FUNCTION SetInstall (szType$) STATIC AS STRING
  1016.  
  1017.     fEXE% = 2
  1018.     IF DoesFileExist(MakePath(SRCDIR$,DIRINI$), femExists) = 1 THEN
  1019.         ToolsLoc$ = GetIniKeyString(MakePath(SRCDIR$, DIRINI$), "TOOLS LOCATION", "DIR")
  1020.         IF MID$(ToolsLoc$, 1, 1) = "\" THEN
  1021.             ToolsLoc$ = MID$(SRCDIR$, 1, 1) + ":" + ToolsLoc$
  1022.         END IF
  1023.     ELSE
  1024.         ToolsLoc$ = ""
  1025.     END IF
  1026.  
  1027.     IF szType$ = "MAX" THEN
  1028.         ReplaceListItem "CheckItems", REQFILES, "ON"
  1029.         ReplaceListItem "CheckItems", WINHELP,  "ON"
  1030.         ReplaceListItem "CheckItems", FPHELP,   "ON"
  1031.         ReplaceListItem "CheckItems", TUTORIAL, "ON"
  1032.         ReplaceListItem "CheckItems", EXAMPLES, "ON"
  1033.         ReplaceListItem "CheckItems", FOXDOC,   "ON"
  1034.         ReplaceListItem "CheckItems", MSGRAPH,  "ON"
  1035.         ReplaceListItem "CheckItems", SPELL,    "ON"
  1036.         ReplaceListItem "CheckItems", SYSFILES, "ON"
  1037.         ReplaceListItem "CheckItems", WINFILES, "ON"
  1038.         ReplaceListItem "CheckItems", SETUP,    "OFF"
  1039.         fEXE% = 1
  1040.  
  1041.     ELSEIF szType$ = "ADMIN" THEN
  1042.         ReplaceListItem "CheckItems", REQFILES, "ON"
  1043.         ReplaceListItem "CheckItems", WINHELP,  "ON"
  1044.         ReplaceListItem "CheckItems", FPHELP,   "ON"
  1045.         ReplaceListItem "CheckItems", TUTORIAL, "ON"
  1046.         ReplaceListItem "CheckItems", EXAMPLES, "ON"
  1047.         ReplaceListItem "CheckItems", FOXDOC,   "ON"
  1048.         ReplaceListItem "CheckItems", MSGRAPH,  "ON"
  1049.         ReplaceListItem "CheckItems", SPELL,    "ON"
  1050.         ReplaceListItem "CheckItems", SYSFILES, "ON"
  1051.         ReplaceListItem "CheckItems", WINFILES, "ON"
  1052.         ReplaceListItem "CheckItems", SETUP,    "ON"
  1053.         fEXE% = 0
  1054.  
  1055.     ELSEIF szType$ = "MIN" THEN
  1056.         ReplaceListItem "CheckItems", REQFILES, "ON"
  1057.         ReplaceListItem "CheckItems", WINHELP,  "OFF"
  1058.         ReplaceListItem "CheckItems", FPHELP,   "OFF"
  1059.         ReplaceListItem "CheckItems", TUTORIAL, "OFF"
  1060.         ReplaceListItem "CheckItems", EXAMPLES, "OFF"
  1061.         ReplaceListItem "CheckItems", FOXDOC,   "OFF"
  1062.         ReplaceListItem "CheckItems", MSGRAPH,  "OFF"
  1063.         ReplaceListItem "CheckItems", SPELL,    "OFF"
  1064.         ReplaceListItem "CheckItems", SYSFILES, "ON"
  1065.         ReplaceListItem "CheckItems", WINFILES, "ON"
  1066.         ReplaceListItem "CheckItems", SETUP,    "OFF"
  1067.         fEXE% = 1
  1068.  
  1069.     ELSEIF szType$ = "WKST" THEN
  1070.         ReplaceListItem "CheckItems", REQFILES, "OFF"
  1071.         ReplaceListItem "CheckItems", WINHELP,  "OFF"
  1072.         ReplaceListItem "CheckItems", FPHELP,   "OFF"
  1073.         ReplaceListItem "CheckItems", TUTORIAL, "OFF"
  1074.         ReplaceListItem "CheckItems", EXAMPLES, "OFF"
  1075.         ReplaceListItem "CheckItems", FOXDOC,   "OFF"
  1076.         ReplaceListItem "CheckItems", MSGRAPH,  "OFF"
  1077.         ReplaceListItem "CheckItems", SPELL,    "OFF"
  1078.         ReplaceListItem "CheckItems", SYSFILES, "ON"
  1079.         ReplaceListItem "CheckItems", WINFILES, "ON"
  1080.         ReplaceListItem "CheckItems", SETUP,    "OFF"
  1081.         MSDEST$ = ToolsLoc$
  1082.         IF ToolsLoc$ <> "" THEN
  1083.             fGRAPH% = 1
  1084.             fSPELL% = 1
  1085.         END IF
  1086.         fEXE% = 1
  1087.  
  1088.     END IF
  1089.  
  1090.     ClearCopyList
  1091.  
  1092.     IF GetListItem("CheckItems", REQFILES) = "ON" THEN
  1093.         IF fEXE% = 2 THEN
  1094.             fEXE% = 1
  1095.         END IF
  1096.         AddSectionFilesToCopyList "reqfiles", SRCDIR$, DEST$
  1097.     ELSE
  1098.         IF fEXE% = 2 THEN
  1099.             fEXE% = 0
  1100.         END IF
  1101.     END IF
  1102.  
  1103.     IF GetListItem("CheckItems", WINHELP) = "ON" THEN
  1104.         AddSectionFilesToCopyList "winhelp", SRCDIR$, DEST$
  1105.     END IF
  1106.  
  1107.     IF GetListItem("CheckItems", FPHELP) = "ON" THEN
  1108.         AddSectionFilesToCopyList "fphelp", SRCDIR$, DEST$
  1109.     END IF
  1110.  
  1111.     IF GetListItem("CheckItems", TUTORIAL) = "ON" THEN
  1112.         AddSectionFilesToCopyList "tutorial", SRCDIR$, DEST$
  1113.     END IF
  1114.  
  1115.     IF GetListItem("CheckItems", EXAMPLES) = "ON" THEN
  1116.         AddSectionFilesToCopyList "examples", SRCDIR$, DEST$
  1117.     END IF
  1118.  
  1119.     IF GetListItem("CheckItems", FOXDOC) = "ON" THEN
  1120.         AddSectionFilesToCopyList "foxdoc", SRCDIR$, DEST$
  1121.     END IF
  1122.  
  1123.     IF GetListItem("CheckItems", MSGRAPH) = "ON" THEN
  1124.         IF ToolsLoc$ <> "" THEN
  1125.             AddSectionFilesToCopyList "msgraph", ToolsLoc$, MakePath(MSDEST$, "msgraph")
  1126.         ELSE
  1127.             AddSectionFilesToCopyList "msgraph", SRCDIR$, MakePath(MSDEST$, "msgraph")
  1128.         END IF
  1129.         AddSectionFilesToCopyList "graphwiz", SRCDIR$, DEST$
  1130.         fGRAPH% = 1
  1131.     END IF
  1132.  
  1133.     IF GetListItem("CheckItems", SPELL) = "ON" THEN
  1134.         IF ToolsLoc$ <> "" THEN
  1135.             AddSectionFilesToCopyList "spell", ToolsLoc$, MakePath(MSDEST$, "proof")
  1136.         ELSE
  1137.             AddSectionFilesToCopyList "spell", SRCDIR$, MakePath(MSDEST$, "proof")
  1138.         END IF
  1139.         AddSectionFilesToCopyList "spellapp", SRCDIR$, DEST$
  1140.         fSPELL% = 1
  1141.     END IF
  1142.  
  1143.     IF GetListItem("CheckItems", SYSFILES) = "ON" THEN
  1144.         IF szType$ <> "ADMIN" THEN
  1145.             AddSectionFilesToCopyList "sysfiles", SRCDIR$, WINSYSDIR$
  1146.         ELSE
  1147.             AddSectionFilesToCopyList "sysfiles", SRCDIR$, MakePath(DEST$, "setup")
  1148.         END IF
  1149.     END IF
  1150.  
  1151.     IF GetListItem("CheckItems", WINFILES) = "ON" THEN
  1152.         IF szType$ <> "ADMIN" THEN
  1153.             AddSectionFilesToCopyList "winfiles", SRCDIR$, WINDIR$
  1154.         ELSE
  1155.             AddSectionFilesToCopyList "winfiles", SRCDIR$, MakePath(DEST$, "setup")
  1156.         END IF
  1157.     END IF
  1158.  
  1159.     IF GetListItem("CheckItems", SETUP) = "ON" THEN
  1160.         AddSectionFilesToCopyList "setup", SRCDIR$, DEST$
  1161.     END IF
  1162.  
  1163.     SetInstall = "OK"
  1164. END FUNCTION
  1165.  
  1166. '**
  1167. '** Purpose:
  1168. '**     Sets all the symbols we need to determine if the user has enough
  1169. '**             disk space.
  1170. '** Arguments:
  1171. '**     none.
  1172. '** Returns:
  1173. '**     none.
  1174. '*************************************************************************
  1175. SUB CheckDiskSpace STATIC
  1176.     oldCursor% = ShowWaitCursor()
  1177.     sz$ = UIStartDlg( CUIDLL$, WAITSPACE, "FNoWaitDlgProc", 0, "")
  1178.  
  1179.     IF SIZESET% = 0 THEN
  1180.         SetSectionSize
  1181.         SIZESET% = 1
  1182.     ENDIF
  1183.  
  1184.     SetSymbolValue "FreeSpace", STR$(GetFreeSpaceForDrive(MID$(DEST$, 1, 1)) / 1024)
  1185.     IF MID$(DEST$, 1, 1) <> MID$(WINSYSDIR$, 1, 1) THEN
  1186.         SetSymbolValue "FreeSpaceWin", STR$(GetFreeSpaceForDrive(MID$(WINSYSDIR$, 1, 1)) / 1024)
  1187.     ELSE
  1188.         SetSymbolValue "FreeSpaceWin", GetSymbolValue("FreeSpace")
  1189.     END IF
  1190.  
  1191.     RestoreCursor oldCursor%
  1192.     UIPop 1
  1193. END SUB
  1194.  
  1195. '**
  1196. '** Purpose:
  1197. '**     Determines if we have enough space to do the install.
  1198. '** Arguments:
  1199. '**     none.
  1200. '** Returns:
  1201. '**     "CONTINUE" or "BACK".
  1202. '*************************************************************************
  1203. FUNCTION EnoughSpace() STATIC AS STRING
  1204.     EnoughSpace = "CONTINUE"
  1205.  
  1206.     SpaceAvail& = VAL(GetSymbolValue("FreeSpace"))
  1207.     SpaceAvailWin& = VAL(GetSymbolValue("FreeSpaceWin"))
  1208.  
  1209.     SpaceNeed& = 0
  1210.     SpaceNeedWin& = 0
  1211.     FOR x% = 1 TO SETUP
  1212.         IF GetListItem("CheckItems", x%) = "ON" THEN
  1213.             SpaceNeed& = SpaceNeed& + VAL(GetListItem("CheckItemsSize", x%))
  1214.             SpaceNeedWin& = SpaceNeedWin& + VAL(GetListItem("WinDriveSize", x%))
  1215.         END IF
  1216.     NEXT
  1217.  
  1218.     ''
  1219.     '' If Windows is on the drive we are installing to, combine
  1220.     '' the needed values.
  1221.     ''
  1222.     IF MID$(DEST$, 1, 1) = MID$(WINSYSDIR$, 1, 1) THEN
  1223.         SpaceNeed& = SpaceNeed& + SpaceNeedWin&
  1224.     END IF
  1225.  
  1226.     ''
  1227.     '' Check to see if we have room
  1228.     ''
  1229.     IF SpaceNeed& > SpaceAvail& THEN
  1230.         dialog% = DISKFULL
  1231.     ELSEIF SpaceNeedWin& > SpaceAvailWin& THEN
  1232.         dialog% = DISKWINFULL
  1233.     ELSE
  1234.         dialog% = 0
  1235.     END IF
  1236.  
  1237.     IF dialog% > 0 THEN
  1238.         NOROOM:
  1239.             sz$ = UIStartDlg(CUIDLL$, dialog%, "FQuitDlgProc", 0, "")
  1240.             IF sz$ = "BACK" THEN
  1241.                 EnoughSpace = "BACK"
  1242.             ELSEIF sz$ = "EXIT" or sz$ = "CANCEL" THEN
  1243.                 ConfirmQuit
  1244.                 GOTO NOROOM
  1245.             END IF
  1246.             UIPop 1
  1247.     END IF
  1248. END FUNCTION
  1249.  
  1250. '**
  1251. '** Purpose:
  1252. '**     Determines whether or not the user wishes to install the 2.0
  1253. '**             compaitibility files.
  1254. '** Arguments:
  1255. '**     none.
  1256. '** Returns:
  1257. '**     none.
  1258. '*************************************************************************
  1259. SUB Get20Compatibility STATIC
  1260.     IF GetSymbolValue( "STF_MODE" ) <> "NETWORK" THEN
  1261.         COMPATIBILITYSTART:
  1262.         sz$ = UIStartDlg(CUIDLL$, COMPATIBILITY, "FThreeOptDlgProc", 0, "")
  1263.  
  1264.             IF sz$ = "ONE" THEN
  1265.                 FLAGS% = FPWSetKeyComp("DOS")
  1266.             ELSEIF sz$ = "TWO" THEN
  1267.                 FLAGS% = FPWSetKeyComp("WIN")
  1268.             ELSE
  1269.                 ConfirmQuit
  1270.                 GOTO COMPATIBILITYSTART
  1271.             END IF
  1272.             UIPop 1
  1273.     END IF
  1274. END SUB
  1275.  
  1276. '**
  1277. '** Purpose:
  1278. '**     Updates any INI files that need it and does any other misc. updates.
  1279. '** Arguments:
  1280. '**     none.
  1281. '** Returns:
  1282. '**     none.
  1283. '*************************************************************************
  1284. SUB UpdateINI STATIC
  1285.     IF fGRAPH% = 1 OR fSPELL% = 1 OR ((fEXE% = 1 OR GetSymbolValue("STF_MODE") = "NETWORK") AND GetSymbolValue("STF_MODE") <> "ADMIN") THEN
  1286.         oldCursor% = ShowWaitCursor()
  1287.         sz$ = UIStartDlg(CUIDLL$, WAITINI, "FNoWaitDlgProc", 0, "")
  1288.  
  1289.         IF GetSymbolValue("STF_MODE") = "ADMIN" THEN
  1290.             IF LCASE$(MID$(MSDEST$, 1, 1)) = LCASE$(MID$(DEST$, 1, 1)) THEN
  1291.                 MSDEST$ = MID$(MSDEST$, 3, LEN(MSDEST$)-2)
  1292.             END IF
  1293.             CreateIniKeyValue MakePath(DEST$, DIRINI$), "TOOLS LOCATION", "DIR", MSDEST$, cmoOverwrite
  1294.         END IF
  1295.  
  1296.         IF fGRAPH% = 1 THEN
  1297.             CreateIniKeyValue "WIN.INI", "MSAPPS", "msapps", MSDEST$, cmoOverwrite
  1298.  
  1299.             CreateRegKeyValue "MSGraph", "Microsoft Graph"
  1300.             CreateRegKeyValue ".gra", "MSGraph"
  1301.             CreateRegKeyValue "MSGraph\protocol\StdFileEditing\server", MakePath(MSDEST$,"msgraph\graph.exe")
  1302.             CreateRegKeyValue "MSGraph\protocol\StdFileEditing\SetDataFormats", "Native,CF_TEXT"
  1303.             CreateRegKeyValue "MSGraph\protocol\StdFileEditing\RequestDataFormats", "Native,CF_METAFILEPICT"
  1304.             CreateRegKeyValue "MSGraph\protocol\StdExecute\server", MakePath(MSDEST$,"msgraph\graph.exe")
  1305.         END IF
  1306.  
  1307.         IF fSPELL% = 1 THEN
  1308.             CreateIniKeyValue "WIN.INI", "MS Proofing Tools", "Custom Dict 1", MakePath(MSDEST$,"proof\custom.dic"), cmoOverwrite
  1309.             CreateIniKeyValue "WIN.INI", "MS Proofing Tools", "Spelling 2057,0", MakePath(MSDEST$,"proof\msspell.dll")+","+MakePath(MSDEST$,"proof\mssp_br.lex"), cmoOverwrite
  1310.             CreateIniKeyValue "WIN.INI", "MS Proofing Tools", "Spelling 1033,0", MakePath(MSDEST$,"proof\msspell.dll")+","+MakePath(MSDEST$,"proof\mssp_am.lex"), cmoOverwrite
  1311.         END IF
  1312.  
  1313.         IF (fEXE% = 1 OR GetSymbolValue("STF_MODE") = "NETWORK") AND GetSymbolValue("STF_MODE") <> "ADMIN" THEN
  1314.             CreateRegKeyValue "MSFoxPro", "Microsoft FoxPro for Windows"
  1315.             CreateRegKeyValue "MSFoxPro\shell\open\command", MakePath(DEST$,"FOXPROW.EXE")+" %1"
  1316.             CreateRegKeyValue ".prg", "MSFoxPro"
  1317.             CreateRegKeyValue ".fxp", "MSFoxPro"
  1318.             CreateRegKeyValue ".app", "MSFoxPro"
  1319.         END IF
  1320.  
  1321.         UIPop 1
  1322.         RestoreCursor oldCursor%
  1323.     END IF
  1324. END SUB
  1325.  
  1326. '**
  1327. '** Purpose:
  1328. '**     Update FILES in config.sys if needed.
  1329. '** Arguments:
  1330. '**     none.
  1331. '** Returns:
  1332. '**     none.
  1333. '*************************************************************************
  1334. SUB UpdateConfig STATIC
  1335.     IF CanFindConfigSys() <> 0 THEN
  1336.         IF GetConfigNumFiles() < MINFILES% THEN
  1337.             SetSymbolValue "RadioDefault", "1"
  1338.             UPDATETYPE:
  1339.                 sz$ = UIStartDlg(CUIDLL$, EDITMODE, "FRadioDlgProc", 0, "")
  1340.                 IF sz$ = "CONTINUE" THEN
  1341.                     UIPop 1
  1342.  
  1343.                     SetSymbolValue "MIN_FILES", "40"
  1344.  
  1345.                     IF GetSymbolValue("ButtonChecked") = "1" THEN
  1346.                         x% = QuietConfigUpdate()
  1347.                     ELSEIF GetSymbolValue("ButtonChecked") = "2" THEN
  1348.                         EDITCONFIGSTART:
  1349.                             sz$ = UIStartDlg(CUIDLL$, EDITCONFIG, "ConfigEditDlg", 0, "")
  1350.                             IF sz$ = "EXIT" or sz$ = "CANCEL" THEN
  1351.                                 ConfirmQuit
  1352.                                 GOTO EDITCONFIGSTART
  1353.                             ENDIF
  1354.                             UIPop 1
  1355.                     ELSE
  1356.                         GOTO CONFIGEND
  1357.                     ENDIF
  1358.  
  1359.                     IF GetSymbolValue("UPDATE_RESULT") = "ERROR" THEN
  1360.                         sz$ = UIStartDlg(CUIDLL$, CANTUPDATE, "FInfo0DlgProc", 0, "")
  1361.                     ELSE
  1362.                         sz$ = UIStartDlg(CUIDLL$, EDITOK, "FDlgFNameProc", 0, "")
  1363.                     END IF
  1364.                     UIPop 1
  1365.  
  1366.                 ELSE
  1367.                     ConfirmQuit
  1368.                     SetSymbolValue "RadioDefault", GetSymbolValue("ButtonChecked")
  1369.                     GOTO UPDATETYPE
  1370.                 END IF
  1371.         END IF
  1372.         CONFIGEND:
  1373.     ELSE
  1374.         SetSymbolValue "ConfirmTextIn", ""
  1375.         AddListItem "ConfirmTextIn", STR$(MINFILES%)
  1376.         AddListItem "ConfirmTextIn", STR$(MINFILES%)
  1377.         sz$ = UIStartDlg(CUIDLL$, CANTFIND, "FSprintfDlgProc", 0, "")
  1378.         UIPop 1
  1379.     END IF
  1380. END SUB
  1381.  
  1382. '**
  1383. '** Purpose:
  1384. '**     Confirms that the user really wants to quit when they select a quit
  1385. '**             option.
  1386. '** Arguments:
  1387. '**     none.
  1388. '** Returns:
  1389. '**     none.
  1390. '*************************************************************************
  1391. SUB ConfirmQuit STATIC
  1392.     CONFIRMQUITSTART:
  1393.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  1394.  
  1395.     IF sz$ = "EXIT" or sz$ = "CANCEL" THEN
  1396.         UIPopAll
  1397.         ERROR STFQUIT
  1398.         ELSEIF sz$ = "REACTIVATE" THEN
  1399.         GOTO CONFIRMQUITSTART
  1400.         ELSE
  1401.         UIPop 1
  1402.         END IF
  1403. END SUB
  1404.  
  1405. '**
  1406. '** Purpose:
  1407. '**     Warns the user that they must enter a name.
  1408. '** Arguments:
  1409. '**     none.
  1410. '** Returns:
  1411. '**     none.
  1412. '*************************************************************************
  1413. SUB WarnBadName STATIC
  1414.     WARNBADNAMESTART:
  1415.         sz$ = UIStartDlg(CUIDLL$, BADNAME, "FInfo0DlgProc", 0, "")
  1416.         IF sz$ = "REACTIVATE" THEN
  1417.         GOTO WARNBADNAMESTART
  1418.         END IF
  1419.         UIPop 1
  1420. END SUB
  1421.  
  1422. '**
  1423. '** Purpose:
  1424. '**     Warns the user that they have specified an invalid path.
  1425. '** Arguments:
  1426. '**     none.
  1427. '** Returns:
  1428. '**     none.
  1429. '*************************************************************************
  1430. FUNCTION WarnBadPath (dlg%) STATIC AS STRING
  1431.     WARNBADPATHSTART:
  1432.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  1433.     IF sz$ = "REACTIVATE" THEN
  1434.         GOTO WARNBADPATHSTART
  1435.         END IF
  1436.         UIPop 1
  1437.  
  1438.     WarnBadPath = sz$
  1439. END FUNCTION
  1440.  
  1441. '**
  1442. '** Purpose:
  1443. '**     Appends a file name to the end of a directory path,
  1444. '**     inserting a backslash character as needed.
  1445. '** Arguments:
  1446. '**     szDir$  - full directory path (with optional ending "\")
  1447. '**     szFile$ - filename to append to directory
  1448. '** Returns:
  1449. '**     Resulting fully qualified path name.
  1450. '*************************************************************************
  1451. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  1452.     IF szDir$ = "" THEN
  1453.     MakePath = szFile$
  1454.     ELSEIF szFile$ = "" THEN
  1455.     MakePath = szDir$
  1456.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  1457.     MakePath = szDir$ + szFile$
  1458.     ELSE
  1459.     MakePath = szDir$ + "\" + szFile$
  1460.     END IF
  1461. END FUNCTION
  1462.  
  1463. '**
  1464. '** Purpose:
  1465. '**     Records the section sizes.
  1466. '** Arguments:
  1467. '**     none.
  1468. '** Returns:
  1469. '**     none.
  1470. '*************************************************************************
  1471. SUB SetSectionSize STATIC
  1472.     ReplaceListItem "CheckItemsSize", REQFILES, SectionSize("reqfiles")
  1473.     ReplaceListItem "WinDriveSize", REQFILES, "0"
  1474.  
  1475.     ReplaceListItem "CheckItemsSize", WINHELP, SectionSize("winhelp")
  1476.     ReplaceListItem "WinDriveSize", WINHELP, "0"
  1477.  
  1478.     ReplaceListItem "CheckItemsSize", FPHELP, SectionSize("fphelp")
  1479.     ReplaceListItem "WinDriveSize", FPHELP, "0"
  1480.  
  1481.     ReplaceListItem "CheckItemsSize", TUTORIAL, SectionSize("tutorial")
  1482.     ReplaceListItem "WinDriveSize", TUTORIAL, "0"
  1483.  
  1484.     ReplaceListItem "CheckItemsSize", EXAMPLES, SectionSize("examples")
  1485.     ReplaceListItem "WinDriveSize", EXAMPLES, "0"
  1486.  
  1487.     ReplaceListItem "CheckItemsSize", FOXDOC, SectionSize("foxdoc")
  1488.     ReplaceListItem "WinDriveSize", FOXDOC, "0"
  1489.  
  1490.     ReplaceListItem "CheckItemsSize", MSGRAPH, SectionSize("msgraph")
  1491.     ReplaceListItem "WinDriveSize", MSGRAPH, SectionSize("graphwiz")
  1492.  
  1493.     ReplaceListItem "CheckItemsSize", SPELL, SectionSize("spellapp")
  1494.     ReplaceListItem "WinDriveSize", SPELL, SectionSize("spell")
  1495.  
  1496.     ''
  1497.     ''  The following items are not options given to the user.
  1498.     ''
  1499.     ReplaceListItem "CheckItemsSize", SYSFILES, "0"
  1500.     ReplaceListItem "WinDriveSize", SYSFILES, SectionSize("sysfiles")
  1501.  
  1502.     ReplaceListItem "CheckItemsSize", WINFILES, "0"
  1503.     ReplaceListItem "WinDriveSize", WINFILES, SectionSize("winfiles")
  1504.  
  1505.     ReplaceListItem "CheckItemsSize", SETUP, SectionSize("setup")
  1506.     ReplaceListItem "WinDriveSize", SETUP, "0"
  1507. END SUB
  1508.  
  1509. '**
  1510. '** Purpose:
  1511. '**     Determines how much space a given section will occupy.
  1512. '** Arguments:
  1513. '**     szSection$ - The section to determine the size of.
  1514. '** Returns:
  1515. '**     The size in K bytes of the section.
  1516. '*************************************************************************
  1517. FUNCTION SectionSize (szSection$) STATIC AS STRING
  1518.     MakeListFromSectionSize "SizeList", szSection$
  1519.     SectionSize = STR$(CalcListSize())
  1520.     RemoveSymbol "SizeList"
  1521. END FUNCTION
  1522.